const db = require("../db/index");

exports.getUserInfo = (req, res) => {
  const sql = `select id,username,nickname,email,user_pic from ev_uers where id = ?`;

  // req对象上的user属性，是token解析成功，express-jwt中间件帮助我们挂载上去的
  db.query(sql, req.user.id, (err, results) => {
    if (err) return res.cc(err);

    if (results.length !== 1) return res.cc("用户获取失败");

    res.send({
      status: 0,
      message: "获取用户基本信息成功",
      data: results[0],
    });
  });
};

// 更新用户基本信息的处理函数
exports.updateUserInfo = (req, res) => {
  const sql = `update ev_uers set ? where id=?`;
  db.query(sql, [req.body, req.body.id], (err, results) => {
    if (err) return res.cc(err);

    if (results.affectedRows !== 1) return res.cc("修改用户基本信息失败！");

    return res.cc("修改用户信息成功！", 0);
  });
};

// 充值密码的处理函数
// 核心思路 ： 旧密码和新密码，必须符合密码的验证规则，并且新密码和旧密码不能一致
exports.updatePassword = (req, res) => {
  const sql = `select * from ev_uers where id=?`;
  db.query(sql, req.user.id, (err, results) => {
    if (err) return res.cc(err);

    if (results.length !== 1) return res.cc("用户不存在！");

    // todo: 判断提交的旧密码是否正确
    const bcrypt = require("bcryptjs");

    const compareResult = bcrypt.compareSync(
      req.body.oldPwd,
      results[0].password
    );
    if (!compareResult) return res.cc("原密码错误");

    // todo:提交新密码
    const sqlStr = `update ev_uers set password=? where id=?`;
    const newPwd = bcrypt.hashSync(req.body.newPwd, 10);

    db.query(sqlStr, [newPwd, req.user.id], (err, results) => {
      if (err) return res.cc(err);

      if (results.affectedRows !== 1) return res.cc("更新密码失败！");

      // 更新密码失败
      res.cc("更新密码成功", 0);
    });
  });
};

// 更新用户头像的处理函数
exports.updateAvatar = (req, res) => {
  const sqlStr = `update ev_uers set user_pic=? where id=?`;

  db.query(sqlStr, [req.body.avatar, req.user.id], (err, results) => {
    if (err) return res.cc(err);

    if (results.affectedRows !== 1) return res.cc("更新头像失败！");

    // 更新头像成功
    return res.cc("更新头像成功", 0);
  });
};
